package thread;

public class ThreadDemo19 {
    public static void main(String[] args) {
        Object locker=new Object();
        Thread t=new Thread(()->{
            synchronized (locker){
                synchronized (locker){
                    System.out.println("hello main!!");
                    //对这个线程加锁时,首先要查看这个线程是否持有这个锁,如果持有这个锁,如果持有这个锁,则不会产生锁冲突,我们称为锁的重入性
                    //里面有相应的线程id,计数器,每加一次锁,计数器就会++,每结一次所,计数器就会减减.
                }
            }
        });
        t.start();
    }
    public static void main1(String[] args) {
        Object A=new Object();
        Object B=new Object();
        Thread t1=new Thread(()->{
            synchronized(A){//两个线程,一个线程获取锁A,另外一个线程获取锁B,再各自获取对方的锁,那么此时就会发生锁冲突,进入循环等待,线程t1等待线程二中的b锁,线程二等待线程一种的A锁,进入死锁状态,可以的办法就是按照锁从小到大的顺序就行加锁
                System.out.println("t1拿到了A锁");
                synchronized (B){
                    System.out.println("t1拿到了AB两把锁");
                }
            }
        });
        Thread t2=new Thread(()->{
            synchronized (A){
                System.out.println("t2拿到了B锁");
            synchronized (B){
                System.out.println("t2拿到了两把锁");
            }
            }
        });
        t1.start();
        t2.start();



    }
}
